#include "stm32f10x.h"                  // Device header

/**
 * @brief 初始化PWM功能
 *
 * 该函数用于初始化PWM功能，配置时基单元和端口模式，设置定时器TIM2的时钟源为内部时钟，并配置TIM2为输出比较模式为PWM模式。
 *
 * @return 无返回值
 */
void PWM_Init(void)
{
	//配置时基单元
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//开启定时器TIM2
	
	//参数1,表示是器件接在a外设上的，参数2表示的是开启时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	
	//配置端口模式
	//定义结构体变量
	//typedef 进行变量重命名
	GPIO_InitTypeDef GPIO_InitSturcrture;
	//结构体参数1：设置为推挽输出
	GPIO_InitSturcrture.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	//结构体参数1：选择接口
	GPIO_InitSturcrture.GPIO_Pin = GPIO_Pin_2;
	//结构体参数1：选择速度
	GPIO_InitSturcrture.GPIO_Speed = GPIO_Speed_50MHz;
	
	/*
	调用GPIO_Init函数
	参数一GPIO外设
	参数二为结构体变量名
	*/
	GPIO_Init(GPIOA,&GPIO_InitSturcrture);
	
	TIM_InternalClockConfig(TIM2);
	
	TIM_TimeBaseInitTypeDef TimeBaseInitStructure;
	TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分频
	TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
	TimeBaseInitStructure.TIM_Period = 100-1;//ARR自动重装器值(0-65535)
	TimeBaseInitStructure.TIM_Prescaler = 36-1;//PSC预分频器值(0-65535)
	TimeBaseInitStructure.TIM_RepetitionCounter = 0;//重复计数器值
	TIM_TimeBaseInit(TIM2,&TimeBaseInitStructure);
	
	TIM_OCInitTypeDef TIM_OCInitStructure;
	
	/*为了避免运行过程中出现不确定的因素，要么将结构体的所有成员
	都配置完整，要么就先给结构体成员都赋一个初始值，再修改部分的
	结构体成员*/
	TIM_OCStructInit(&TIM_OCInitStructure);		//赋一个初始值
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = 0;		//CCR
	
	//初始化输出比较单元
	TIM_OC3Init(TIM2,&TIM_OCInitStructure);
	
	TIM_Cmd(TIM2,ENABLE);
}

/**
 * @brief 设置定时器TIM2的比较值3
 *
 * 该函数用于设置定时器TIM2的比较值3，通过比较值来控制PWM信号的占空比。
 *
 * @param Compare 要设置的比较值，数据类型为uint16_t
 */
void PWM_SetCompare3(uint16_t Compare)
{
	TIM_SetCompare3(TIM2,Compare);
}

